class Person {
    // 1.public（公有的），默认可见性，可以在类的内部和外部访问
    // 2.protected（保护的），只能在内部和子类中使用，实例不可见
    // 3.private（私有的），只能在内部使用，实例和子类不可以见
    // 4.readonly 只读修饰符，只读，即只能在初始化时赋值，并且不能再修改。
    public name: string;
    readonly age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName() {
        console.log(this.name)
        console.log(this.age)
        // this.age = 10;
    }
}

let p1: Person = new Person('张三', 18)
console.log(p1.name)
p1.getName()

//继承
class Student extends Person {
    sex: string;

    constructor(name: string, age: number, sex: string) {
        // super指代父类
        super(name, age);
        this.sex = sex
    }

    getAge() {
        // console.log(this.)
    }
}

let p2: Student = new Student('李四', 30, '男')
console.log(p2)

//implements  接口可以和类连用
interface IPerson {
    name: string
}

class Person1 implements IPerson {
    name = '王五'
}

const p: Person1 = new Person1()
console.log(p)